package com.xunge.controller;

import com.xunge.anno.Log;
import com.xunge.pojo.Dept;
import com.xunge.pojo.Result;
import com.xunge.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.lang.reflect.Method;
import java.util.List;
@Slf4j
@RestController
public class DeptController {

    //private final static Logger log = LoggerFactory.getLogger(DeptController.class); //固定的
    @Autowired
    private DeptService deptService;
    /*
    *  查询全部部门
    */

    //@RequestMapping(value = "/depts" , method = RequestMethod.GET) //指定请求方式为GET
    @GetMapping("/depts") //简写
    public Result list(){

        List<Dept> dept = deptService.findAll();
        //System.out.println("查询全部部门...");
        log.info("查询全部部门...");

        return Result.success(dept);
    }

    /*
    *  根据ID删除部门
    * */

    //方式1: @RequestParam
    //注意事项:一旦声明了RequestParam，该参数在请求时必须传递，如果不传递将会报错。(默认required 为true)
    /*  @DeleteMapping("/depts")
    public Result delete(@RequestParam("id") Integer id){
        System.out.println("删除部门:" + id);
        return Result.success();
    }*/

    //方式2：方式一的简写
    //如果请求参数名与形参变量名相同，直接定义方法形参即可接收。（省略aRequestParam）
    @Log
    @DeleteMapping("/depts")
    public Result delete(Integer id){
        //System.out.println("删除部门:" + id);
        log.info("删除部门: {}",id);
        deptService.deleteById(id);
        return Result.success();
    }
    /**
     * 新增部门操作
     * 通常通过实体对象接收，保证json格式的键名与对象属性名保持一致，并添加RequestBody注解
     */
    @Log
    @PostMapping("/depts")
    public Result add(@RequestBody Dept dept){
        //System.out.println("新增部门：" + dept.getName());
        log.info("新增部门: {}",dept);
        deptService.add(dept);
        return Result.success();
    }
    /**
     * 根据ID查询部门信息
     * @PathVariable 获取路径中的变量
     */

/*    @GetMapping("/depts/{id}")
    public Result getInfo(@PathVariable("id") Integer deptId){
        int id = deptId;
        System.out.println("查询部门信息ID：" + id);
        Dept dept = deptService.getInfo(id);
        return Result.success(dept);
    }*/

    @GetMapping("/depts/{id}")
    public Result getInfo(@PathVariable Integer id){ //简写
       // System.out.println("查询部门信息ID：" + id);
        log.info("查询部门信息ID: {}",id);

        Dept dept = deptService.getInfo(id);
        return Result.success(dept);
    }

    @Log
    @PutMapping("/depts")
    public Result update(@RequestBody Dept dept){
        //System.out.println("修改部门:" + dept);
        log.info("修改部门: {}",dept);
        deptService.updateById(dept);
        return  Result.success();
    }


}
